package com.aspose.cells;

abstract class zcl {
   public static double a(double var0, double var2) {
      return Math.exp(zabx.a(var0) + zabx.a(var2) - zabx.a(var0 + var2));
   }

   public static double b(double var0, double var2) {
      return zabx.a(var0) + zabx.a(var2) - zabx.a(var0 + var2);
   }

   public static double a(double var0, double var2, double var4) {
      if (var0 <= 0.0D) {
         return 0.0D;
      } else {
         return var0 >= 1.0D ? 1.0D : a(1.0D, 0.0D, var2, var4, var0);
      }
   }

   static double a(double var0, double var2, double var4, double var6) {
      double var8 = Double.NEGATIVE_INFINITY;
      if (var0 == -1.0D) {
         return Double.NaN;
      } else {
         double var10 = 1.0D - (var0 + var2) * var4 / (var0 + 1.0D);
         if (Math.abs(var10) >= var8 && var10 != 0.0D) {
            var10 = 1.0D / var10;
            short var12 = 512;
            int var13 = 0;
            double var16 = 1.0D;
            double var14 = var10;

            while(var13 < var12) {
               int var18 = var13 + 1;
               double var19 = (double)var18 * (var2 - (double)var18) * var4 / ((var0 - 1.0D + (double)(2 * var18)) * (var0 + (double)(2 * var18)));
               var10 = 1.0D + var19 * var10;
               var16 = 1.0D + var19 / var16;
               if (Math.abs(var10) < var8 || Math.abs(var16) < var8) {
                  return Double.NaN;
               }

               var10 = 1.0D / var10;
               double var21 = var10 * var16;
               var14 *= var21;
               var19 = -(var0 + (double)var18) * (var0 + var2 + (double)var18) * var4 / ((var0 + (double)(2 * var18)) * (var0 + (double)(2 * var18) + 1.0D));
               var10 = 1.0D + var19 * var10;
               var16 = 1.0D + var19 / var16;
               if (Math.abs(var10) >= var8 && Math.abs(var16) >= var8) {
                  var10 = 1.0D / var10;
                  var21 = var10 * var16;
                  var14 *= var21;
                  if (Math.abs(var21 - 1.0D) >= 1.0E-323D && var14 * Math.abs(var21 - 1.0D) >= var6) {
                     ++var13;
                     continue;
                  }
                  break;
               }

               return Double.NaN;
            }

            if (var13 >= var12) {
               return Double.NaN;
            } else {
               return var14;
            }
         } else {
            return Double.NaN;
         }
      }
   }

   static double a(double var0, double var2, double var4, double var6, double var8) {
      if (var8 == 0.0D) {
         return var0 * 0.0D + var2;
      } else if (var8 == 1.0D) {
         return var0 * 1.0D + var2;
      } else {
         double var10;
         if (var4 > 100000.0D && var6 < 10.0D && var8 > var4 / (var4 + var6)) {
            var10 = var4 + (var6 - 1.0D) / 2.0D;
            return var0 * (1.0D - zabx.b(var6, -var10 * Math.log(var8))) + var2;
         } else if (var6 > 100000.0D && var4 < 10.0D && var8 < var6 / (var4 + var6)) {
            var10 = var6 + (var4 - 1.0D) / 2.0D;
            return var0 * zabx.b(var4, -var10 * Math.log(1.0D - var8)) + var2;
         } else {
            var10 = b(var4, var6);
            double var12 = -var10 + var4 * Math.log(var8) + var6 * Math.log(1.0D - var8);
            double var14 = Math.exp(var12);
            double var16;
            double var18;
            if (var8 < (var4 + 1.0D) / (var4 + var6 + 2.0D)) {
               var16 = Math.abs(var2 / (var0 * var14 / var4)) * Double.MIN_VALUE;
               var18 = a(var4, var6, var8, var16);
               return var0 * (var14 * var18 / var4) + var2;
            } else {
               var16 = Math.abs((var0 + var2) / (var0 * var14 / var6)) * Double.MIN_VALUE;
               var18 = a(var6, var4, 1.0D - var8, var16);
               double var20 = var14 * var18 / var6;
               return var0 == -var2 ? -var0 * var20 : var0 * (1.0D - var20) + var2;
            }
         }
      }
   }

   static double a(double var0, double var2, double var4, double var6, double var8, double var10) {
      double var12 = 0.0D;

      for(double var14 = 1.0D; Math.abs(var14 - var12) > var8; var0 = 0.5D * (var12 + var14)) {
         double var16 = a(var0, var4, var6);
         if (Math.abs(var16 - var2) < var10) {
            return var0;
         }

         if (var16 < var2) {
            var12 = var0;
         } else if (var16 > var2) {
            var14 = var0;
         }
      }

      return var0;
   }

   static double b(double var0, double var2, double var4) {
      if (var0 >= 0.0D && var0 <= 1.0D) {
         double var8 = zabx.a(var2 + var4);
         double var10 = zabx.a(var2);
         double var12 = zabx.a(var4);
         double var6;
         if (var0 != 0.0D && var0 != 1.0D) {
            var6 = Math.exp(var8 - var10 - var12 + Math.log(var0) * (var2 - 1.0D) + Math.log(1.0D - var0) * (var4 - 1.0D));
         } else {
            var6 = Math.exp(var8 - var10 - var12) * Math.pow(var0, var2 - 1.0D) * Math.pow(1.0D - var0, var4 - 1.0D);
         }

         return var6;
      } else {
         return 0.0D;
      }
   }

   public static double c(double var0, double var2, double var4) {
      if (var0 >= 0.0D && var0 <= 1.0D) {
         if (var2 < 0.0D) {
            throw new IllegalArgumentException("CDFBETAPINV: a < 0");
         } else if (var4 < 0.0D) {
            throw new IllegalArgumentException("CDFBETAPINV: b < 0");
         } else if (var0 == 0.0D) {
            return 0.0D;
         } else if (var0 == 1.0D) {
            return 1.0D;
         } else if (var0 > 0.5D) {
            return d(1.0D - var0, var2, var4);
         } else {
            double var8 = var2 / (var2 + var4);
            double var6;
            double var10;
            double var12;
            double var14;
            if (var0 < 0.1D) {
               var10 = zabx.a(var2 + var4);
               var12 = zabx.a(var2);
               var14 = zabx.a(var4);
               double var16 = (Math.log(var2) + var12 + var14 - var10 + Math.log(var0)) / var2;
               if (var16 <= 0.0D) {
                  var6 = Math.exp(var16);
                  var6 *= Math.pow(1.0D - var6, -(var4 - 1.0D) / var2);
               } else {
                  var6 = var8;
               }

               if (var6 > var8) {
                  var6 = var8;
               }
            } else {
               var6 = var8;
            }

            var6 = a(var6, var0, var2, var4, 0.01D, 0.01D);
            int var23 = 0;

            do {
               var12 = var0 - a(var6, var2, var4);
               var14 = b(var6, var2, var4);
               if (var12 == 0.0D || var23++ > 64) {
                  break;
               }

               var10 = var12 / Math.max(2.0D * Math.abs(var12 / var6), var14);
               double var19 = -((var2 - 1.0D) / var6 - (var4 - 1.0D) / (1.0D - var6)) * var10 * var10 / 2.0D;
               double var21;
               if (Math.abs(var19) < Math.abs(var10)) {
                  var21 = var10 + var19;
               } else {
                  var21 = var10 * 2.0D * Math.abs(var10 / var19);
               }

               if (var6 + var21 > 0.0D && var6 + var21 < 1.0D) {
                  var6 += var21;
               } else {
                  var6 = Math.sqrt(var6) * Math.sqrt(var8);
               }
            } while(Math.abs(var10) > 1.0E-10D * var6);

            if (Math.abs(var12) > 1.0E-10D * var0) {
               throw new IllegalArgumentException("CDFBETAPINV: inverse failed to converge");
            } else {
               return var6;
            }
         }
      } else {
         throw new IllegalArgumentException("CDFBETAPINV: P must be in range 0 < P < 1");
      }
   }

   public static double d(double var0, double var2, double var4) {
      if (var0 >= 0.0D && var0 <= 1.0D) {
         if (var2 < 0.0D) {
            throw new IllegalArgumentException("CDFBETAPINV: a < 0");
         } else if (var4 < 0.0D) {
            throw new IllegalArgumentException("CDFBETAPINV: b < 0");
         } else if (var0 == 0.0D) {
            return 1.0D;
         } else if (var0 == 1.0D) {
            return 0.0D;
         } else {
            return var0 > 0.5D ? c(1.0D - var0, var2, var4) : 1.0D - c(var0, var4, var2);
         }
      } else {
         throw new IllegalArgumentException("CDFBETAPINV: Q must be inside range 0 < Q < 1");
      }
   }

   static double b(double var0, double var2, double var4, double var6, double var8) {
      return zabx.b(var2 + var4) / zabx.b(var2) / zabx.b(var4) * (Math.pow(var0 - var6, var2 - 1.0D) * Math.pow(var8 - var0, var4 - 1.0D) / Math.pow(var8 - var6, var2 + var4 - 1.0D));
   }

   public static double e(double var0, double var2, double var4) {
      return c(var0, var2, var4, 0.0D, 1.0D);
   }

   public static double c(double var0, double var2, double var4, double var6, double var8) {
      if (var0 >= var6 && var0 <= var8 && var8 > var6) {
         if (var2 >= 0.0D && var4 >= 0.0D) {
            var0 = (var0 - var6) / (var8 - var6);

            try {
               return a(var0, var2, var4);
            } catch (Exception var11) {
               return 0.0D;
            }
         } else {
            return 0.0D;
         }
      } else {
         return 0.0D;
      }
   }
}
